home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The X-Philes (2nd Revision)
/
The X-Philes Number 1 (1995).iso
/
xphiles
/
hp48_2
/
mdisp
< prev
next >
Wrap
Internet Message Format
|
1995-03-31
|
21KB
From: Rick Grevelle <ftg0673@tamsun.tamu.edu>
Subject: v03i017: mdisp - Faster DISP v1.0, Part01/01
Newsgroups: comp.sources.hp48
Followup-To: comp.sys.hp48
Approved: spell@seq.uncwil.edu
Checksum: 3545890271 (verify with brik -cv)
Submitted-by: Rick Grevelle <ftg0673@tamsun.tamu.edu>
Posting-number: Volume 3, Issue 17
Archive-name: mdisp/part01
BEGIN_DOC mdisp.doc
What follows is partly a repost of an article which first appeared in
comp.sys.hp48 regarding a somewhat faster machine routine version of
DISP. A few individuals have requested the source code in order that
they too might make modifications to suit other needs. A few points
regarding this scheme and its purpose are as follows:
o Using the 48's display routines requires bank shifting
because all the font tables are contained in the hidden
ROM, and this can reduce the overall speed of programs
that require frequent displaying of data.
o This routine uses arguments similar to DISP except that
level 2 can be only a string, global or local name and
level 1 must be a real; where values less than or equal
to 0 will display at the top of the display and values
greater than or equal to 7 will appear at the bottom of
display where the menu bars are located.
o Negative numbers are treated as if they were positive.
Rick Grevelle
ftg0673@tamsun.tamu.edu
END_DOC
BEGIN_SRC mdisp.s
ascii `HPHP48-E'
code
move.1 0xf, p ; p=f
move.p1 0x2, c ; c(s)=2
move.1 0x9, p ; p=9
call.a 0x18ac6 ; check2 args
call.a 0x0679b ; save registers
move.a @d1, c ; c=hhhhh
swap.a c, d1 ; d1=hhhhh, c=XXXXX
push.a c ; rstk=XXXXX
move.p5 0x02933, c ; c=02933
move.a @d1, a ; a=level 1 prolog
breq.a c, a, argok ; arg is real
jump.3 errmsg ; do error/exit
argok:
add.a 0x5, d1 ; d1=hhhhh+5
move.a @d1, a ; a=??eee
brz.x a, realok ; within range
move.p3 0x500, c ; c=500
clr.s a ; a(s)=0
brle.x c, a, toprw ; #500 le a
dec.s a ; a(s)=f
jump.3 toprw ; menus
realok:
add.a 0xe, d1 ; d1=hhhhh+19
move.s @d1, a ; a(s)=0-9
toprw:
move.1 0xf, p ; p=f
move.p1 0x7, c ; c(s)=7
move.1 0x0, p ; p=0
clr.a c ; c=00000
move.p2 0x14, c ; c=00014
move.a c, a ; a=(above)
brle.s c, a, menuptr ; menus
move.5 0x7055b, d0 ; d0=7055b
move.p3 0x110, c ; c=00110
move.s a, c ; c(s)=row number
rwloop:
dec.s c ; decr loop counter
brcs setrw ; set row address
add.a c, a ; a=#14+(n*#110)
brcc rwloop ; continue
menuptr:
move.5 0x70551, d0 ; d0=70551
setrw:
move.a @d0, c ; c=stk/menu grob
add.a c, a ; a=row address
pop.a c ; c=XXXXX
swap.a a, c ; c=row addr, a=(above)
push.a c ; rstk=row addr
move.a a, d1 ; d1=XXXXX
add.a 0x5, d1 ; d1=XXXXX+5
move.a @d1, a ; a=iiiii
move.a a, d1 ; d1=(above)
move.a @d1, a ; a=level 2 prolog
add.a 0x5, d1 ; d1=iiiii+5
move.p5 0x02a2c, c ; c=02a2c
brne.a c, a, testnm ; string arg
pop.a c ; c=row addr
call.3 clrwn ; clear row
call.3 strhook ; display string
jump.3 exit ; exit
testnm:
move.p5 0x02e48, c ; c=02e48
breq.a c, a, dispnm ; display name
move.p5 0x02e6d, c ; c=02e6d
brne.a c, a, errmsg ; error message
dispnm:
pop.a c ; c=row addr
call.3 clrwn ; clear row
call.3 glbhook ; display name
exit:
call.a 0x067d2 ; getptr
inc.a d ;\
inc.a d ; drop2
add.a 0xa, d1 ;/
move.a @d0, a ;\
add.a 0x5, d0 ; rpl ret
jump.a @a ;/
errmsg:
pop.a c ; clear rstk
call.a 0x067d2 ; getptr
jump.a 0x18cb7 ; errn #202
clrwn:
push.a c ; rstk=row addr
move.a c, d0 ; d0=row addr
clr.a c ; c=00000
move.p2 0x10, c ; c=00010
clr.w a ; a=0000000000000000
clrloop:
move.w a, @d0 ; clear pixels
add.a 0x10, d0 ; d0=next pixels
dec.a c ; decr loop counter
brcc clrloop ; continue
pop.a c ; c=row addr
move.a c, d0 ; d0=(above)
ret ;
strhook:
clrb 0x1, st ; (string hook)
move.a @d1, c ; c=string length
sub.a 0x5, c ; c=(above) - 5
retz.a c ; null string, return set
srb.a c ; c=number of bytes
add.a 0x3, d1 ; d1=addr of 1st char - 2
jump.3 strintr ; string intro
glbhook:
clrb 0x1, st ; (global hook)
clr.a c ; c=00000
move.b @d1, c ; c=number of bytes
retz.a c ; null name, return set
strintr:
clrb 0x0, st ; clr oversize flag
move.a c, d ; c=(above)
dec.a d ; initialize loop count
move.p5 0x00015, c ; c=00015
brle.a d, c, getble ; get grob table addr
setb 0x0, st ; set oversize flag
move.a c, d ; d=00015
dec.a d ; adjust loop count
getble:
call.3 grobtbl ; a=grob table addr - 2
move.a a, b ; b=(above)
move.p5 0x001ee, c ; c=(16 x 31) - 2
sub.a c, b ; b=prg counter - 494
strloop:
add.a 0x2, d1 ; d1=addr of ascii char
clr.a c ; c=00000
move.b @d1, c ; c=ascii char
move.p5 0x0001e, a ; a=0001e
brgt.a c, a, setchar ; set register c if taken
move.p2 0x9e, c ; c=0009e
setchar:
sln.a c ; c=c / 16
add.a b, c ; c=char addr in table
swap.a c, d1 ; d1=(above) c=addr of char
push.a c ; rstk=saved d1
swap.a c, d0 ; c=stack grob addr
move.a c, d0 ; restore d0
push.a c ; rstk=saved d0
call.3 dispchr ; display char
pop.a c ; c=saved d0
move.a c, d0 ; restore d0
add.a 0x1, d0 ; d0=next grob char position
pop.a c ; c=saved d1
move.a c, d1 ; restore d1
brbs 0x1, st, clrbit ; clear bit if set
setb 0x1, st ; set odd pass flag
jump.3 decrcnt ; decr loop count
clrbit:
clrb 0x1, st ; clr odd pass flag
add.a 0x1, d0 ; d0=next grob char position
decrcnt:
dec.a d ; decr loop count
brcc strloop ; continue
brbs 0x0, st, wrticks ; display tick marks
ret ; exit display scheme
wrticks:
move.p5 0x001f0, c ; c=001f0
add.a b, c ; c=ticks addr
move.a c, d1 ; d1=(above)
dispchr:
move.1 0x8, p ; p=char loop count
chrloop:
move.b @d1, c ; char grob byte in table
brbc 0x1, st, oddpass ; even if taken
move.b @d0, a ; a=stack grob byte
sln.a c ;\
srb.a c ; move char over 2 bits
srb.a c ;/
or.b a, c ; c=adjustment
oddpass:
move.b c, @d0 ; set display data
add.a 0x10, d0 ;\
add.a 0x10, d0 ; next line of pixels
add.a 0x2, d0 ;/
add.a 0x2, d1 ; d1=next byte of grob char
inc.1 p ; incr loop count
brcc chrloop ; continue
retclrc ;
grobtbl:
move.a pc,a ; a= program counter
retclrc ; return clear carry
data.16 0x0015150000000000
data.16 0x0000000000000000
data.16 0x0004000404040404
data.16 0x00000000000a0a0a
data.16 0x000a0a1f0a1f0a0a
data.16 0x00040f140e051e04
data.16 0x0018190204081303
data.16 0x0016091502050502
data.16 0x0000000000040404
data.16 0x0008040202020408
data.16 0x0002040808080402
data.16 0x00000a041f040a00
data.16 0x000004041f040400
data.16 0x0204060600000000
data.16 0x000000001f000000
data.16 0x0006060000000000
data.16 0x0000010204081000
data.16 0x000e11131519110e
data.16 0x000e040404040604
data.16 0x001f01020c10110e
data.16 0x000e11100e10110e
data.16 0x0008081f090a0c08
data.16 0x000e1110100f011f
data.16 0x000e11110f01020c
data.16 0x000202020408101f
data.16 0x000e11110e11110e
data.16 0x000608101e11110e
data.16 0x0000060600060600
data.16 0x0204060600060600
data.16 0x0008040201020408
data.16 0x0000001f001f0000
data.16 0x0001020408040201
data.16 0x000400040810110e
data.16 0x001e01051d15110e
data.16 0x001111111f11110e
data.16 0x000f11110f11110f
data.16 0x000e11010101110e
data.16 0x0007091111110907
data.16 0x001f01010f01011f
data.16 0x000101010f01011f
data.16 0x001e11190101110e
data.16 0x001111111f111111
data.16 0x000e04040404040e
data.16 0x000e111110101010
data.16 0x0011090503050911
data.16 0x001f010101010101
data.16 0x0011111115151b11
data.16 0x0011111915131111
data.16 0x000e11111111110e
data.16 0x000101010f11110f
data.16 0x001609151111110e
data.16 0x001109050f11110f
data.16 0x000e11100e01110e
data.16 0x000404040404041f
data.16 0x000e111111111111
data.16 0x0004040a0a111111
data.16 0x00111b1515111111
data.16 0x0011110a040a1111
data.16 0x00040404040a1111
data.16 0x001f01020408101f
data.16 0x000e02020202020e
data.16 0x0000100804020100
data.16 0x000e08080808080e
data.16 0x0000000000110a04
data.16 0x001f000000000000
data.16 0x0000000000040202
data.16 0x001e111e100e0000
data.16 0x000f1111110f0101
data.16 0x001e0101011e0000
data.16 0x001e1111111e1010
data.16 0x000e011f110e0000
data.16 0x0002020207020a04
data.16 0x0e101e11110e0000
data.16 0x00111111110f0101
data.16 0x000e040404060004
data.16 0x06090808080c0008
data.16 0x0009050305090101
data.16 0x000e040404040406
data.16 0x00111515150b0000
data.16 0x00111111110f0000
data.16 0x000e1111110e0000
data.16 0x01010f11110f0000
data.16 0x10101e11111e0000
data.16 0x00010101031d0000
data.16 0x000f100e011e0000
data.16 0x00040a0202070202
data.16 0x001e111111110000
data.16 0x00040a1111110000
data.16 0x000a151511110000
data.16 0x00110a040a110000
data.16 0x0e101e1111110000
data.16 0x001f0204081f0000
data.16 0x000c02020102020c
data.16 0x0004040404040404
data.16 0x0006080810080806
data.16 0x0000000815020000
data.16 0x00150a150a150a15
data.16 0x001f090604081000
data.16 0x00110a040a11001f
data.16 0x0000040a0a111f00
data.16 0x000406050404041c
data.16 0x0002050404041408
data.16 0x001f12040804121f
data.16 0x0003070f1f0f0703
data.16 0x000a0a0a0a1f0000
data.16 0x000e11111e080402
data.16 0x001f001f02040810
data.16 0x001f001f08040201
data.16 0x0000021f041f0800
data.16 0x0016090916000000
data.16 0x000004081f080400
data.16 0x000004021f020400
data.16 0x00040e1504040404
data.16 0x0004040404150e04
data.16 0x0008080815120000
data.16 0x000609090e040204
data.16 0x000e010f010e0000
data.16 0x10101414150a0000
data.16 0x000609090f090906
data.16 0x00110a0402010100
data.16 0x0102020e12120c00
data.16 0x00060909091e0000
data.16 0x00081404051e0000
data.16 0x000a151511090000
data.16 0x00001f110a040000
data.16 0x000a0a0a0a0a0a1f
data.16 0x001b0a111111110e
data.16 0x0000000e0e0e0000
data.16 0x00000a15150a0000
data.16 0x0000000000000000
data.16 0x0004040404040004
data.16 0x00041e05051e0400
data.16 0x001f02020702120c
data.16 0x00110e1111110e11
data.16 0x00041f041f0a1111
data.16 0x0004040400040404
data.16 0x0006080e110e020c
data.16 0x000000000000000a
data.16 0x000e11171317110e
data.16 0x00000f06090e0806
data.16 0x0000140a050a1400
data.16 0x000000080f000000
data.16 0x000000000f000000
data.16 0x000e111b1717110e
data.16 0x000000000000001f
data.16 0x00000000000e0a0e
data.16 0x001f04041f040400
data.16 0x0000000e020e080e
data.16 0x0000000e080e080e
data.16 0x0000000000000408
data.16 0x0117090909000000
data.16 0x001614141617171e
data.16 0x0000000606000000
data.16 0x0608040000000000
data.16 0x000000000e040406
data.16 0x00001f000e11110e
data.16 0x0000050a140a0500
data.16 0x00101c1502050901
data.16 0x001808111a050901
data.16 0x00101c17060b1203
data.16 0x000e110102040004
data.16 0x0011111f110e0402
data.16 0x0011111f110e0408
data.16 0x0011111f110e0a04
data.16 0x0011111f110e050a
data.16 0x0011111f110e000a
data.16 0x0011111f110e0a0e
data.16 0x001d05051f05051a
data.16 0x06080e110101110e
data.16 0x001f010f011f0402
data.16 0x001f010f011f0408
data.16 0x001f010f011f0a04
data.16 0x001f010f011f000a
data.16 0x000e0404040e0402
data.16 0x000e0404040e0408
data.16 0x000e0404040e0a04
data.16 0x000e0404040e000a
data.16 0x00060a1217120a06
data.16 0x0011191513110a14
data.16 0x000e1111110e0402
data.16 0x000e1111110e0408
data.16 0x000e1111110e0a04
data.16 0x000e1111110e050a
data.16 0x000e1111110e000a
data.16 0x0000110a040a1100
data.16 0x00010e1315190e10
data.16 0x000e111111110402
data.16 0x000e111111110408
data.16 0x000e111111000a04
data.16 0x000e11111111000a
data.16 0x000404040a110408
data.16 0x0007020e120e0207
data.16 0x01010f11110f110e
data.16 0x001e111e100e0402
data.16 0x001e111e100e0408
data.16 0x001e111e100e0a04
data.16 0x001e111e100e050a
data.16 0x001e111e100e000a
data.16 0x001e111e100e0a0e
data.16 0x001f051f141b0000
data.16 0x06081e01011e0000
data.16 0x000e011f110e0402
data.16 0x000e011f110e0408
data.16 0x000e011f110e0a04
data.16 0x000e011f110e000a
data.16 0x000e040406000402
data.16 0x000e040406000408
data.16 0x000e040406000a04
data.16 0x000e04040600000a
data.16 0x000609090e081c08
data.16 0x001111110f000a14
data.16 0x000e11110e000402
data.16 0x000e11110e000408
data.16 0x000e11110e000a04
data.16 0x000e11110e000a14
data.16 0x000e11110e00000a
data.16 0x000004001f000400
data.16 0x000d121509160000
data.16 0x001e111111000402
data.16 0x001e111111000408
data.16 0x001e111111000a04
data.16 0x001e11111100000a
data.16 0x0e101e1111000408
data.16 0x0101070909070100
data.16 0x0e101e111100000a
endcode
END_SRC
BEGIN_ASC mdisp.asc
%%HP: T(3)A(D)F(.);
"CCD20530102F302298F6CA818FB97601471370634339201438A2606FC0174143
9386132005AC09BE01A4C6A0017D15342F30720D23141DA9CEC11BB550732011
AC6A4E4E0CA57F1B15507146CA07DE0613117414313114317434C2A208A60107
72507F6065203484E208A2E034D6E208A642077C2076608F2D760E7E71791421
64808C078F2D7608D7BC8106134D23101AF0150716FCE56F0713401841147818
FA48AA00819F21726010841D214F8AA00840D7CF34510008BF90850D7CF75A0D
834EE100E1171D214F80824E10008B26031E9F2C913706136134067730071341
6007135871908516900841160CF5EA8704001340F100C91352814F8615114AF2
819F2819F20E6A14C16F16F1611710C53D0381B4030000000000515100000000
00000000004040404040004000A0A0A00000000000A0A0F1A0F1A0A00040E150
E041F04000303180402091810020505020519061004040400000000000804020
2020408000204080808040200000A040F140A00000004040F140400000000000
0060604020000000F10000000000000000006060000001804020100000E01191
513111E000406040404040E000E01101C02010F100E01101E00111E00080C0A0
90F1808000F110F0010111E000C02010F01111E000F101804020202000E01111
E01111E000E01111E10180600000606000606000000060600060604020804020
10204080000000F100F10000001020408040201000E011018040004000E01151
D15010E100E01111F111111100F01111F01111F000E01110101011E000709011
1111907000F11010F01010F100F11010F010101000E01110109111E100111111
F111111100E04040404040E000010101011111E0001190503050901100101010
101010F10011B15151111111001111315191111100E01111111111E000F01111
F010101000E011111151906100F01111F050901100E01110E00111E000F14040
4040404000111111111111E000111111A0A04040001111115151B111001111A0
40A01111001111A04040404000F10180402010F100E02020202020E000001020
4080010000E08080808080E00040A0110000000000000000000000F100202040
00000000000000E001E111E1001010F0111111F0000000E1101010E1000101E1
111111E1000000E011F110E00040A02070202020000000E01111E101E01010F0
1111111100400060404040E0008000C080808090601010905030509000604040
404040E0000000B051515111000000F011111111000000E0111111E0000000F0
1111F010100000E11111E101010000D130101010000000E110E001F000202070
2020A04000000011111111E1000000111111A04000000011115151A000000011
A040A011000000111111E101E00000F1804020F100C02020102020C000404040
40404040006080800180806000000020518000000051A051A051A05100000180
406090F100F10011A040A0110000F111A0A0400000C140404050604000804140
4040502000F12140804021F1003070F0F1F07030000000F1A0A0A0A000204080
E11111E00001804020F100F10010204080F100F1000080F140F1200000000000
6190906100004080F180400000004020F1204000004040404051E0400040E051
40404040000000215180808000402040E0909060000000E010F010E0000000A0
5141410101609090F0909060000010102040A0110000C02121E02020100000E1
90909060000000E15040418000000090115151A000000040A011F10000F1A0A0
A0A0A0A000E011111111A0B1000000E0E0E00000000000A05151A00000000000
000000000040004040404040000040E15050E14000C02120702020F10011E011
1111E011001111A0F140F140004040400040404000C020E011E0806000A00000
0000000000E01171317111E0006080E09060F000000041A050A0410000000000
F080000000000000F000000000E0117171B111E000F100000000000000E0A0E0
0000000000004040F14040F100E080E020E0000000E080E080E0000000804000
00000000000000009090907110E1717161414161000000006060000000000000
0000408060604040E000000000E01111E000F100000050A041A0500000109050
2051C10100109050A1118081003021B06071C10100400040201011E0002040E0
11F11111008040E011F111110040A0E011F1111100A050E011F1111100A000E0
11F1111100E0A0E011F1111100A15050F15050D100E011101011E080602040F1
10F010F1008040F110F010F10040A0F110F010F100A000F110F010F1002040E0
404040E0008040E0404040E00040A0E0404040E000A000E0404040E00060A021
7121A0600041A01131519111002040E0111111E0008040E0111111E00040A0E0
111111E000A050E0111111E000A000E0111111E0000011A040A011000001E091
5131E01000204011111111E000804011111111E00040A000111111E000A00011
111111E000804011A0404040007020E021E0207000E011F01111F010102040E0
01E111E1008040E001E111E10040A0E001E111E100A050E001E111E100A000E0
01E111E100E0A0E001E111E1000000B141F150F1000000E11010E180602040E0
11F110E0008040E011F110E00040A0E011F110E000A000E011F110E000204000
604040E000804000604040E00040A000604040E000A00000604040E00080C180
E09090600041A000F011111100204000E01111E000804000E01111E00040A000
E01111E00041A000E01111E000A00000E01111E000004000F100400000000061
905121D000204000111111E100804000111111E10040A000111111E100A00000
111111E1008040001111E101E00010709090701010A000001111E101E0CD3D"
END_ASC
BYTES: #D3DCh 2086.5
BEGIN_UU mdisp.uue
begin 600 mdisp
M2%!(4#0X+47,+5 # ?(#(HEOK!CXFV<0=#$'-C23 D*@;V#'$4-#EH,0)0
MRI#K$$IL"A#744/R R?0,D'1FNP<L5L%-P(1RJ;DY,!:][%1!1=DK'#M8#$1
M1T$3$T$31T,L*H!J$' G!?<&5@)#2"Z *@Y#;2Z :B1PQP)G!OC29^#G%Y=!
M$D8(R'#XTF> ?<L88#'4,@&A#U%P8<]>]G Q!($408>!KX2J !CY$B<& 4C1
M$O2H"H $??Q#%0" ^PE8T,=_I= XY!X 'G'1$O0(*.0! +AB,.'YPAES8#$6
M0V!W W Q% 9P,847"5AA"8 48<!?KGA #$$'P"<,248]&A1$:0O&/F"D2_@
MID$<]F$?%G$!7-,P&$LP 5%0 0$! 0$ 0 "@H*
M *"A\*'PH* 0>!0X4#P0 Q,(! (9& "!04"%0D6 0$! " 0"
M @($" "! @(" 0" *!!\$"@ 0$'P0$ !@8$ @ !\
M &!@ $ @$ @$ X1&143$0X ! 8$! 0$#@ .$1 , @$? X1$ X0
M$0X " P*"1\(" ? 0\0$!$. P" 0\1$0X 'Q (! (" @ .$1$.$1$. X1
M$1X0" 8 8& 8& !@8 !@8$ @@$ @$"! @ ? !\ ! @0(! (!
M X1$ @$ 0 #A$5'04!'@ .$1$?$1$1 \1$0\1$0\ #A$! 0$1#@ '"1$1
M$0D' !\! 0\! 1\ 'P$!#P$! 0 .$0$!&1$> !$1$1\1$1$ #@0$! 0$#@ 0
M$! 0$1$. !$)!0,%"1$ 0$! 0$!'P 1&Q45$1$1 !$1$Q49$1$ #A$1$1$1
M#@ /$1$/ 0$! X1$1$5"18 #Q$1#P4)$0 .$0$.$!$. !\$! 0$! 0 $1$1
M$1$1#@ 1$1$*"@0$ !$1$145&Q$ $1$*! H1$0 1$0H$! 0$ !\0" 0" 1\
M#@(" @("#@ 0($"! X(" @(" X ! H1 ? ("!
M .$!X1'@ ! 0\1$1$/ '@$! 1X $! >$1$1'@ X1'P$. 0*
M @<" @( .$1$>$ X! 0\1$1$1 0 !@0$! X " ," @("08! 0D% P4)
M 8$! 0$! X +%145$0 \1$1$1 #A$1$0X /$1$/ 0$ !X1
M$1X0$ '0,! 0$ > 0X0#P " @<" @H$ $1$1$1X 1$1$*!
M !$1%14* $0H$"A$ 1$1$>$ X !\(! (? P" @$" @P ! 0$! 0$
M! &" @0" @& A4( %0H5"A4*%0 $ @$!@D? !\ $0H$"A$ !\1
M"@H$ <! 0$!08$ @4! 0$!0( 'Q($" 02'P #!P\?#P<# 'PH*"@H
M @0('A$1#@ 0" 0"'P ? $"! @? !\ @?!!\" 6"0D6 $"!\(
M! 0"'P($ $! 0$%0X$ 0.%00$! 0 2%0@(" $ @0."0D&
M#@$/ 0X *%104$! &"0D/"0D& ! 0($"A$ P2$@X" @$ !X)"0D&
M '@4$% @ )$145"@ 0*$1\ !\*"@H*"@H #A$1$1$*&P X.
M#@ "A45"@ $ 0$! 0$ $'@4%'@0 #!("!P("'P 1
M#A$1$0X1 !$1"A\$'P0 ! 0$ 0$! , @X1#@@& H #A$7$Q<1
M#@ &" X)!@\ 4"@4*% #P@ / X1%Q<;$0X 'P
M ."@X $!!\$!!\ #@@. @X ." X(#@ @$
M "0D)%P$>%Q<6%!06 8& $" 8&! 0. X1$0X
M'P 4*% H% !"04"%1P0 $)!1H1"!@ Q(+!A<<$ $ 0" 1$. ($
M#A$?$1$ " 0.$1\1$0 $"@X1'Q$1 H%#A$?$1$ "@ .$1\1$0 ."@X1'Q$1
M !H%!1\%!1T #A$! 1$." 8"!!\!#P$? @$'P$/ 1\ ! H? 0\!'P * !\!
M#P$? ($#@0$! X " 0.! 0$#@ $"@X$! 0. H #@0$! X !@H2%Q(*!@ 4
M"A$3%1D1 ($#A$1$0X " 0.$1$1#@ $"@X1$1$. H%#A$1$0X "@ .$1$1
M#@ $0H$"A$ ! .&143#@$ @01$1$1#@ (!!$1$1$. 0* !$1$0X "@ 1
M$1$1#@ (!!$*! 0$ <"#A(. @< #A$/$1$/ 0$"! X0'A$> @$#A >$1X
M! H.$!X1'@ *!0X0'A$> H #A >$1X #@H.$!X1'@ !L4'P4? '@$!
M'@@& @0.$1\!#@ (! X1'P$. 0*#A$? 0X "@ .$1\!#@ "! &! 0. @$
M 8$! X ! H !@0$#@ * &! 0. @<" X)"08 % H #Q$1$0 "! .$1$.
M @$ X1$0X ! H #A$1#@ 4"@ .$1$. H X1$0X 0 'P $ !8)
M%1(- ($ !$1$1X " 0 $1$1'@ $"@ 1$1$> H !$1$1X " 0 $1$>$ X
/ 0<)"0<! 0H !$1'A .
end
END_UU